ping “Name or service not known” 排查

朋友的 Ubuntu 18.04 遇到个问题,ping 部分域名时会出现“Name or service not known”问题,域名是保证存在,且能用 nslookup 查出结果的。

给我发了两个 strace ping 的结果文件,一个能正常 ping 通的,一个是出现“Name or service not known”的。

和网络有关的,只用关注网络相关的函数即可。注意到失败日志的这段:

socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 5
connect(5, {sa_family=AF_UNIX, sun_path="/var/run/nscd/socket"}, 110) = 0
sendto(5, "\2\0\0\0\r\0\0\0\6\0\0\0hosts\0", 18, MSG_NOSIGNAL, NULL, 0) = 18

直接向 /var/run/nscd/socket 发的 Socket 包,NSCD 是本地的 DNS 缓存服务,也就是可能与缓存有关,把 NSCD 服务停止再试即可。

systemctl stop nscd